package com.spring.springboot.sys.core.config;

import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.google.code.kaptcha.util.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

import java.util.Properties;

/**
 * @author 15625
 * @date 2021-03-17 14:30
 * @description 图片验证码生成配置
 */
@Component
public class KaptchaConfig {

    @Bean
    public DefaultKaptcha initDefaultKaptcha() {

        /*
         * kaptcha.border.thickness	边框厚度,合法值：>0	默认：1
         * kaptcha.producer.impl	图片实现类	默认：com.google.code.kaptcha.impl.DefaultKaptcha
         * kaptcha.textproducer.impl	文本实现类	默认：com.google.code.kaptcha.text.impl.DefaultTextCreator
         * kaptcha.background.impl	背景实现类	默认：com.google.code.kaptcha.impl.DefaultBackground
         * kaptcha.word.impl	文字渲染器	默认：com.google.code.kaptcha.text.impl.DefaultWordRenderer
         * kaptcha.session.date	session date	默认：KAPTCHA_SESSION_DATE
         */

        DefaultKaptcha defaultKaptcha = new DefaultKaptcha();

        Properties properties = new Properties();

        // kaptcha.border	图片边框,合法值：yes,no	 默认：yes
        properties.setProperty("kaptcha.border", "no");

        // kaptcha.border.color	边框颜色,合法值： r,g,b (and optional alpha) 或者 white,black,blue.	默认：black
        properties.setProperty("kaptcha.border.color", "105,179,90");

        // kaptcha.textproducer.font.color	字体颜色,合法值： r,g,b  或者 white,black,blue.	默认：black
        properties.setProperty("kaptcha.textproducer.font.color", "blue");

        // kaptcha.image.width	图片宽	默认：200
        properties.setProperty("kaptcha.image.width", "150");

        // kaptcha.image.height	图片高	默认：50
        properties.setProperty("kaptcha.image.height", "50");

        /* 图片样式
         * 水纹com.google.code.kaptcha.impl.WaterRipple
         * 鱼眼com.google.code.kaptcha.impl.FishEyeGimpy
         * 阴影com.google.code.kaptcha.impl.ShadowGimpy
         * 默认：com.google.code.kaptcha.impl.WaterRipple
         */
        properties.setProperty("kaptcha.obscurificator.impl", "com.google.code.kaptcha.impl.ShadowGimpy");

        // kaptcha.textproducer.font.size	字体大小	默认：40px.
        properties.setProperty("kaptcha.textproducer.font.size", "40");

        // kaptcha.textproducer.char.space	文字间隔	默认：2
        properties.setProperty("kaptcha.textproducer.char.space", "3");

        // kaptcha.noise.impl	干扰实现类	默认：com.google.code.kaptcha.impl.DefaultNoise
        properties.setProperty("kaptcha.noise.impl", "com.google.code.kaptcha.impl.NoNoise");

        // kaptcha.noise.color	干扰颜色,合法值： r,g,b 或者 white,black,blue.	默认：black
        properties.setProperty("kaptcha.noise.color", "35,37,38");

        // kaptcha.session.key	session key	默认：KAPTCHA_SESSION_KEY
        properties.setProperty("kaptcha.session.key", "code");

        // kaptcha.textproducer.char.length	验证码长度	默认：5
        properties.setProperty("kaptcha.textproducer.char.length", "4");

        // kaptcha.textproducer.font.names	字体	    默认：Arial,Courier
        properties.setProperty("kaptcha.textproducer.font.names", "DejaVuSerif");

        // kaptcha.textproducer.char.string	文本集合,验证码值从此集合中获取	默认：abcde2345678gfynmnpwx
        properties.setProperty("kaptcha.textproducer.char.string", "acdefhkmnprtwxy345678");

        // kaptcha.background.clear.from	背景颜色渐变,开始颜色	默认：light grey
        properties.setProperty("kaptcha.background.clear.from", "185,56,213");

        // kaptcha.background.clear.to	背景颜色渐变,结束颜色 默认：white
        properties.setProperty("kaptcha.background.clear.to", "white");

        defaultKaptcha.setConfig(new Config(properties));

        return defaultKaptcha;
    }
}
